<?php
/**
 * Description of cacheManager
 *
 * @author Federico del valle (quaidy@gmail.com)
 */
class cacheManager {
    private static $memcache = null;

    /**
     * Devuelve el objeto memcache en uso
     * @return memcache
     */
    public static function getCache() {
      self::loadAndConnect();
      return self::$memcache;        
    }

    /**
     * Conecta al server de cache
     */
    private static function connect() {
        if (configManager::obtener("general", "memcache")) {
            self::$memcache->connect(configManager::obtener("memcache", "host"),configManager::obtener("memcache", "port"));
        } else {
            return false;
        }
    }

    /**
     * Carga y conecta el cache
     */
    private static function loadAndConnect() {
        if (self::$memcache == null) {
            self::$memcache = new Memcache();
            self::connect();
        }
    }

     /**
     * Carga el cache
     */
    private static function loadCache() {
        if (self::$memcache == null) {
            self::$memcache = new Memcache();
        }
    }


    public static function connectToHost($host,$port) {
      self::loadCache();
      self::$memcache->connect($host,$port);
    }

    /**
     * Agrega un elemento al cache solo si la clave no existe
     *
     * @param string $key Clave a agregar
     * @param mixed $var Variable a agregar
     * @param int $time Tiempo de expiracion en segundos (5 minutos default)
     * @param boolean $compress Si se va a comprimir los datos o no (false por default)
     * @return boolean
     */
    public static function add($key,$var,$time=300,$compress=false) {
        self::loadAndConnect();
        if ($compress) {
            $compress= MEMCACHE_COMPRESSED;
        } else {
            $compress = 0;
        }
        return self::$memcache->add($key,$var,$compress,$time);
    }
    
    /**
     * Setea un elemento en cache 
     *
     * @param string $key Clave a setear
     * @param mixed $var Variable a agregar
     * @param int $time Tiempo de expiracion en segundos (5 minutos default)
     * @param boolean $compress Si se va a comprimir los datos o no (false por default)
     * @return boolean
     */
    public static function set($key,$var,$time=300,$compress=false) {
        self::loadAndConnect();
        if ($compress) {
            $compress= MEMCACHE_COMPRESSED;
        } else {
            $compress = 0;
        }
        return self::$memcache->set($key,$var,$compress,$time);
    }

    /**
     * Obtiene un elemento del cache
     * @param string $key key a buscar
     * @return mixed devuelve false si la clave no existe
     */
    public static function get($key) {
        self::loadAndConnect();
        return self::$memcache->get($key);
    }
}
?>
